Skip to content

Update all dependencies#53

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all
Open

Update all dependencies#53
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all

Conversation

@renovate

@renovate renovate Bot commented Mar 24, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update Change Age Confidence
actions/checkout action major v6v7 age confidence
gradle (source) minor 9.4.19.6.1 age confidence
gradle/actions action major v5v6 age confidence
io.github.takahirom.roborazzi plugin minor 1.59.01.67.0 age confidence
io.github.takahirom.roborazzi:roborazzi-junit-rule dependencies minor 1.59.01.67.0 age confidence
io.github.takahirom.roborazzi:roborazzi-compose dependencies minor 1.59.01.67.0 age confidence
io.github.takahirom.roborazzi:roborazzi dependencies minor 1.59.01.67.0 age confidence
org.jetbrains.kotlinx:kotlinx-coroutines-test dependencies minor 1.10.21.11.0 age confidence
org.mockito.kotlin:mockito-kotlin dependencies minor 6.2.36.3.0 age confidence
org.jetbrains.kotlin.plugin.compose plugin minor 2.3.202.4.0 age confidence
com.google.devtools.ksp (source) plugin patch 2.3.62.3.9 age confidence
com.google.protobuf:protobuf-javalite (source) dependencies minor 4.34.04.35.1 age confidence
androidx.navigation:navigation-compose (source) dependencies patch 2.9.72.9.8 age confidence
androidx.navigation:navigation-runtime-ktx (source) dependencies patch 2.9.72.9.8 age confidence
androidx.lifecycle:lifecycle-runtime-compose (source) dependencies minor 2.10.02.11.0 age confidence
androidx.lifecycle:lifecycle-viewmodel-compose (source) dependencies minor 2.10.02.11.0 age confidence
androidx.compose:compose-bom dependencies minor 2026.03.002026.06.01 age confidence
com.google.dagger.hilt.android plugin minor 2.59.22.60.1 age confidence
androidx.lifecycle:lifecycle-runtime-ktx (source) dependencies minor 2.10.02.11.0 age confidence
com.google.protobuf:protoc (source) dependencies minor 4.34.04.35.1 age confidence
org.jetbrains.kotlinx:kotlinx-serialization-json dependencies minor 1.10.01.11.0 age confidence
org.jetbrains.kotlin.plugin.serialization plugin minor 2.3.202.4.0 age confidence
androidx.core:core-ktx (source) dependencies minor 1.18.01.19.0 age confidence
org.jetbrains.kotlin.android plugin minor 2.3.202.4.0 age confidence
androidx.hilt:hilt-navigation-compose (source) dependencies minor 1.3.01.4.0 age confidence
com.google.dagger:hilt-android-testing dependencies minor 2.59.22.60.1 age confidence
com.google.dagger:hilt-android-compiler dependencies minor 2.59.22.60.1 age confidence
com.google.dagger:hilt-android dependencies minor 2.59.22.60.1 age confidence
androidx.compose.foundation:foundation (source) dependencies minor 1.10.51.11.4 age confidence
com.google.protobuf plugin minor 0.9.60.10.0 age confidence
io.coil-kt.coil3:coil-network-okhttp dependencies minor 3.4.03.5.0 age confidence
io.coil-kt.coil3:coil-compose dependencies minor 3.4.03.5.0 age confidence
com.android.library (source) plugin minor 9.1.09.2.1 age confidence
com.android.application (source) plugin minor 9.1.09.2.1 age confidence

Release Notes

actions/checkout (actions/checkout)

v7.0.0

Compare Source

v7

Compare Source

gradle/gradle (gradle)

v9.6.1

Compare Source

v9.6.0

Compare Source

v9.5.1: 9.5.1

Compare Source

The Gradle team is excited to announce Gradle 9.5.1.

Here are the highlights of this release:

  • Task provenance in reports and failure messages
  • Type-safe accessors for precompiled Kotlin Settings plugins

Read the Release Notes

We would like to thank the following community members for their contributions to this release of Gradle:
atm1020,
mataha,
Adam,
Attila Kelemen,
Benedikt Ritter,
Björn Kautler,
Caro Silva Rode,
CHANHAN,
Dmitry Nezavitin,
Eng Zer Jun,
KugelLibelle,
Madalin Valceleanu,
Markus Gaisbauer,
Oliver Kopp,
Philip Wedemann,
ploober,
Roberto Perez Alcolea,
Rohit Anand,
Suvrat Acharya,
Ujwal Suresh Vanjare,
Victor Merkulov

Upgrade instructions

Switch your build to use Gradle 9.5.1 by updating your wrapper:

./gradlew wrapper --gradle-version=9.5.1 && ./gradlew wrapper

See the Gradle 9.x upgrade guide to learn about deprecations, breaking changes and other considerations when upgrading.

For Java, Groovy, Kotlin and Android compatibility, see the full compatibility notes.

Reporting problems

If you find a problem with this release, please file a bug on GitHub Issues adhering to our issue guidelines.
If you're not sure you're encountering a bug, please use the forum.

We hope you will build happiness with Gradle, and we look forward to your feedback via Twitter or on GitHub.

v9.5.0: 9.5.0

Compare Source

The Gradle team is excited to announce Gradle 9.5.0.

Here are the highlights of this release:

  • Task provenance in reports and failure messages
  • Type-safe accessors for precompiled Kotlin Settings plugins

Read the Release Notes

We would like to thank the following community members for their contributions to this release of Gradle:
atm1020,
mataha,
Adam,
Attila Kelemen,
Benedikt Ritter,
Björn Kautler,
Caro Silva Rode,
CHANHAN,
Dmitry Nezavitin,
Eng Zer Jun,
KugelLibelle,
Madalin Valceleanu,
Markus Gaisbauer,
Oliver Kopp,
Philip Wedemann,
ploober,
Roberto Perez Alcolea,
Rohit Anand,
Suvrat Acharya,
Ujwal Suresh Vanjare,
Victor Merkulov

Upgrade instructions

Switch your build to use Gradle 9.5.0 by updating your wrapper:

./gradlew wrapper --gradle-version=9.5.0 && ./gradlew wrapper

See the Gradle 9.x upgrade guide to learn about deprecations, breaking changes and other considerations when upgrading.

For Java, Groovy, Kotlin and Android compatibility, see the full compatibility notes.

Reporting problems

If you find a problem with this release, please file a bug on GitHub Issues adhering to our issue guidelines.
If you're not sure you're encountering a bug, please use the forum.

We hope you will build happiness with Gradle, and we look forward to your feedback via Twitter or on GitHub.

gradle/actions (gradle/actions)

v6.2.0

Compare Source

Highlights

This release brings significant behaviour improvements to Enhanced caching, improvements to the generated Job Summary, and a number of correctness and security fixes.

  1. Improved cache-cleanup mechanism. Cleanup of stale files from the Gradle User Home is now faster, and no longer depends on Gradle or a JVM. It works by inspecting the local file state directly, removing the Gradle invocation from the post-build step.
  2. More granular, more stable caching. The local build cache is stored as a separate cache entry, so it can be restored and invalidated independently of the main Gradle User Home entry. Transient Gradle housekeeping files are excluded from the cache, reducing its size and improving stability.
  3. Hide obsolete Job summaries in PR commments: When a new Job summary comment is added to a PR, previous outdated Job summaries are now hidden.
  4. Improved caching report in the job summary. The cache report now uses a single, consistent layout across all cache states and providers. Provider information is integrated directly into the report, and per-entry details are available in an expandable section. (#​985)
  5. Correctness and security fixes. A unique cache key is now used per run attempt, so re-runs no longer collide; the job summary shows the cache key string rather than an internal id; and bundled dependencies have been updated, including a ReDoS fix and a fast-xml CVE fix.
What's Changed
New Contributors

Full Changelog: gradle/actions@v6.1.1...v6.2.0

v6.1.1

Compare Source

This release updates various dependency versions, resolving several reported security vulnerabilities.
No functional changes are included

What's Changed

Full Changelog: gradle/actions@v6.1.0...v6.1.1

v6.1.0

Compare Source

New: Basic Cache Provider

A new MIT-licensed Basic Caching provider is now available as an alternative to the proprietary Enhanced Caching provided by gradle-actions-caching. Choose Basic Caching by setting cache-provider: basic on setup-gradle or dependency-submission actions.

  • Built on @actions/cache -- fully open source
  • Caches ~/.gradle/caches and ~/.gradle/wrapper directories
  • Cache key derived from build files (*.gradle*, gradle-wrapper.properties, etc.)
  • Clean cache on build file changes (no restore keys, preventing stale entry accumulation)

Limitations vs Enhanced Caching: No cache cleanup, no deduplication of cached content, cached content is fixed unless build files change.

Revamped Licensing & Distribution Documentation
  • New DISTRIBUTION.md documents the licensing of each component (particularly Basic Caching vs Enhanced Caching)
  • Simplified licensing notices in README, docs, and runtime log output
  • Clear usage tiers: Enhanced Caching is free for public repos and in Free Preview for private repos
What's Changed

Full Changelog: gradle/actions@v6.0.1...v6.1.0

v6.0.1

Compare Source

[!IMPORTANT]
The release of gradle/actions@v6 contains important changes to the license terms. More details in this blog post.
TL;DR: By upgrading to v6, you accept the Terms of Use for the gradle-actions-caching component.

Summary

The license changes in v6 introduced a gradle-actions-caching license notice that is printed in logs and in each job summary.

With this release, the license notice will be muted if build-scan terms have been accepted, or if a Develocity access key is provided.

What's Changed
  • Bump actions used in docs by @​Goooler in #​792
  • Add typing information for use by typesafegithub by @​bigdaz in #​910
  • Mute license warning when terms are accepted by @​bigdaz in #​911
  • Mention explicit license acceptance in notice by @​bigdaz in #​912
  • Bump com.fasterxml.jackson.dataformat:jackson-dataformat-smile from 2.21.1 to 2.21.2 in /sources/test/init-scripts in the gradle group across 1 directory by @​dependabot[bot] in #​907

Full Changelog: gradle/actions@v6.0.0...v6.0.1

v6.0.0

Compare Source

[!IMPORTANT]
The release of gradle/actions@v6 contains important changes to the license terms. More details in this blog post.
TL;DR: By upgrading to v6, you accept the Terms of Use for the gradle-actions-caching component.

Summary
  • Caching functionality of 'gradle-actions' has been extracted into a separate gradle-actions-caching library, and is no longer open-source. See this blog post for more context.
  • Existing, rudimentary, configuration-cache support has been removed, pending a fully functional implementation in gradle-actions-caching.
  • Dependencies updated to address security vulnerabilities

[!IMPORTANT]

Licensing notice

The caching functionality in `gradle-actions` has been extracted into `gradle-actions-caching`, a proprietary commercial component that is not covered by the MIT License.
The bundled `gradle-actions-caching` component is licensed and governed by a separate license, available at https://gradle.com/legal/terms-of-use/.

The `gradle-actions-caching` component is used only when caching is enabled and is not loaded or used when caching is disabled.

Use of the `gradle-actions-caching` component is subject to a separate license, available at https://gradle.com/legal/terms-of-use/.
If you do not agree to these license terms, do not use the `gradle-actions-caching` component.

What's Changed

Full Changelog: gradle/actions@v5.0.2...v6.0.0

v6

Compare Source

takahirom/roborazzi (io.github.takahirom.roborazzi)

v1.67.0

Compare Source

New experimental feature - Record a video of your UI

You can now record how a UI evolves over virtual time -- animations, transitions, gestures, and any other time-driven change -- as an animated image that plays back in real time. Because Roborazzi runs under Robolectric's virtual clock, designers and reviewers can watch a transition or gesture actually play out frame by frame, instead of inferring motion from a strip of static screenshots.

Unlike captureRoboGif(), which only records visually distinct states with a fixed 1-second delay, recordRoboVideo() pauses the Compose main clock and drives it frame by frame, so intermediate animation frames are captured with faithful timing. Interactions in the block run with the clock paused; call delay() in the scope to advance virtual time while frames are recorded. After the block returns, recording keeps going until the UI settles, so a block that only performs a click still records the whole animation that click starts.

@​OptIn(ExperimentalRoborazziApi::class)
@​Test
fun recordVideo() {
  composeTestRule.setContent {
    AnimatedBoxContent()
  }
  composeTestRule.onNodeWithTag("root")
    .recordRoboVideo(
      composeRule = composeTestRule,
      filePath = "build/outputs/roborazzi/video.gif",
      videoOptions = RoboVideoOptions(fps = 10),
    ) {
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
      composeTestRule.onNodeWithTag("toggle").performClick()
      delay(300)
    }
}

A few things to know:

  • The output format is chosen by the file extension. .gif produces a GIF (256 colors; the default), and .png produces a lossless, full-color APNG (Animated PNG) -- prefer .png when color fidelity matters. Only these animated-image formats are supported for now; the "video" name was chosen deliberately so real video formats (e.g. mp4) can be added later without renaming the API.
  • Timing granularity differs by format. GIF stores frame delays in centiseconds (10ms resolution), so prefer an fps whose frame step (1000 / fps) is a multiple of 10ms (e.g. 10, 20, 25, 50) for exact GIF timing. APNG encodes the step exactly.
  • RoboVideoOptions exposes fps (default 10), settleTimeoutMillis (extra virtual time to keep recording while the UI is still changing after the block ends; default 3000), and backgroundColor (ARGB fill for the fixed recording viewport when frames have different sizes; default white).
  • This is record-only and experimental (@ExperimentalRoborazziApi). When the Roborazzi task runs in compare/verify mode it is a complete no-op -- the block is not executed and no image is recorded or verified.
Whole-screen recording with recordScreenRoboVideo()

recordScreenRoboVideo() records all window roots instead of a single node, mirroring how captureScreenRoboImage() relates to captureRoboImage(). Prefer it when you want a stable, device-sized viewport for every frame, or when you need to capture window overlays such as dialogs added mid-recording or touch/tap indicators -- these live on separate window roots and are invisible to a node-scoped recording.

recordScreenRoboVideo(
  composeRule = composeTestRule,
  filePath = "build/outputs/roborazzi/video_screen.gif",
  videoOptions = RoboVideoOptions(fps = 10),
) {
  composeTestRule.onNodeWithTag("toggle").performClick()
  delay(300)
}
Recording gestures

Because the recorder idles the Robolectric main Looper in lockstep with the Compose main clock, suspend-based gesture drivers make progress while frames are recorded. For example, you can drive a swipe with saket/touch-robot from a LaunchedEffect, use recordScreenRoboVideo() so the touch indicator overlay is captured, and just pump virtual time in the block:

composeTestRule.setContent {
  // A composable whose LaunchedEffect drives a touch-robot swipe on the root.
  DraggableBoxContent()
}
recordScreenRoboVideo(
  composeRule = composeTestRule,
  filePath = "build/outputs/roborazzi/swipe.gif",
) {
  // Pump virtual time so the LaunchedEffect gesture progresses while frames are captured.
  delay(1000)
}
touch_robot_swipe_screen

https://redirect.github.com/takahirom/roborazzi/pull/863/changes#diff-42e66fda923fc339b289fbb6468a18e795d5bf16a09ecf97ccd9596329afe7e8R91

See the how-to guide for full details.

Maintenance - Bump AndroidX Compose to 1.8.3

The AndroidX Compose pins used by the samples and tests were bumped from 1.7.x to 1.8.3. This enables using libraries built against Compose 1.8+ (such as touch-robot, whose bytecode calls Composer.shouldExecute, introduced in runtime 1.8.0). The JetBrains Compose Multiplatform version and Kotlin are untouched -- they are a separate axis.

Bugfix - Custom ComposePreviewTester docs

AndroidComposePreviewTester is final, so the previously documented subclassing approach didn't compile. The docs now show a minimal working setup using Kotlin class delegation (by AndroidComposePreviewTester(...)), and the example is compile-verified as a sample in the Gradle plugin integration-test project. Thanks @​hiSandog for the feedback on making the docs example concrete and testable!

What's Changed

Full Changelog: takahirom/roborazzi@1.66.0...1.67.0

v1.66.0

Compare Source

New feature - iOS (Compose Multiplatform) screenshot testing now shares the full Roborazzi pipeline

Roborazzi's iOS support has been rebuilt on top of the same image pipeline used on Android and Desktop. Previously, captureRoboImage on iOS was a separate implementation that only wrote a PNG and did a basic comparison. Now, iOS goes through the common RoborazziOptions pipeline, so most options you already use on Android work on iOS too:

composeUiTest.captureRoboImage(
  filePath = "ios_screenshot.png",
  roborazziOptions = RoborazziOptions(
    compareOptions = RoborazziOptions.CompareOptions(
      resultValidator = ThresholdValidator(0.01f),
    ),
  ),
) {
  MyComposeScreen()
}

What now works on iOS:

  • Comparison options: changeThreshold, resultValidator, custom imageComparator (via dropbox/differ), and resizeScale
  • Comparison images: failed comparisons generate the familiar reference | diff | new image, including ComparisonStyle.Grid with grid lines and Reference/Diff/New labels, matching the JVM layout
  • Reports: results are written into the standard Roborazzi report JSON, with contextData and custom RoborazziReporters (the roborazzi.contextdata flag is honored on iOS too)
  • Record/Compare/Verify tasks: recordRoborazziIos* / compareRoborazziIos* / verifyRoborazziIos* behave consistently with other targets

Current limitations on iOS (see the feature matrix for details):

  • Output format is PNG only (WebP is not supported)
  • Dump mode and applyDeviceCrop are not applicable
  • PixelBitConfig.Rgb565 falls back to 8888 with a warning
  • The automatically-added default context data (test class name) is JVM-only
  • Highly translucent pixels (alpha near 0) may lose some color precision due to CoreGraphics' premultiplied alpha (pinned down by characterization tests)

iOS support remains experimental, and behavior may be adjusted in future releases.

Note: if you already have recorded iOS golden images, please re-record them (recordRoborazzi*) after upgrading — the capture and encoding path has changed, so existing baselines may report differences.

Thanks to @​eyedol and @​vladcudoidem for building out the original iOS diffing and reporting infrastructure that this release builds upon, and thank you @​jl-jonas and @​kartikprakash1 for reporting iOS issues.

Bugfix - New golden images were misreported as "Changed" in recording tasks

When a recording task wrote a golden image for the first time, the report classified it as Changed instead of Added. The recording flow saves the actual image to the golden path before deciding the result status, so the existence check always saw the file as present. The check is now captured before any write, so newly added images are reported as Added correctly.

Bugfix - Descriptive error when AI assertions are used without configuration

Calling AI assertions without configuring aiAssertionOptions used to crash with an unhelpful NullPointerException. It now throws a descriptive error explaining that aiAssertionOptions needs to be set up.

What's Changed

Full Changelog: takahirom/roborazzi@1.65.0...1.66.0

v1.65.0

Compare Source

New experimental feature - Separate output directories per variant/target

You can now opt in to giving each Roborazzi task its own output directory:

roborazzi {
  @​OptIn(ExperimentalRoborazziApi::class)
  separateOutputDirs.set(true)
}

When enabled, each Roborazzi task gets its own output and intermediate subdirectory (e.g. build/outputs/roborazzi/debug/, build/outputs/roborazzi/desktop/) instead of sharing a single directory across every variant/target. It defaults to false, so existing behavior is unchanged.

Why: When multiple Roborazzi test tasks run in a single Gradle invocation (e.g. check, KMP's allTests), they race over the shared output directory: one task's finalizer copy can delete files while another task fingerprints them as input. On Gradle 9 this hard-fails with Cannot access input property 'roborazziImageInput' (NoSuchFileException). Separating the directories removes the race at the root.

Note: If you enable this option, your golden images move to per-task subdirectories, so you'll need to re-record them (or move the existing files).

Thank you, @​boiler23, @​F43nd1r, and @​vladcudoidem for reporting these issues.

Maintenance - Binary compatibility validation

Roborazzi now uses the kotlinx binary-compatibility-validator in CI, so any unintended change to the published JVM API surface fails CI instead of slipping into a release. This has no effect on your project, but it makes upcoming refactoring for iOS/KMP support safer.

What's Changed

Full Changelog: takahirom/roborazzi@1.64.0...1.65.0

v1.64.0

Compare Source

New feature - Filtering previews by annotation

You can now control which Compose Previews are captured with annotationFilter.

To use the built-in @RoboPreviewExclude / @RoboPreviewInclude annotations, add the roborazzi-annotations dependency:

implementation("io.github.takahirom.roborazzi:roborazzi-annotations:[version]")

By default, previews annotated with @RoboPreviewExclude are skipped and everything else is captured:

@​RoboPreviewExclude
@​Preview
@​Composable
fun WorkInProgressPreview() { /* not captured */ }

Set annotationFilter to RoboPreviewInclude to instead capture only previews annotated with @RoboPreviewInclude:

roborazzi {
  @​OptIn(ExperimentalRoborazziApi::class)
  generateComposePreviewRobolectricTests {
    enable = true
    packages = listOf("com.example")
    annotationFilter = AnnotationFilter.Filter.RoboPreviewInclude
  }
}

You can also filter by your own annotations by passing their fully qualified class names:

// Set either one, not both
annotationFilter = AnnotationFilter.Exclude("com.example.MyExcludeAnnotation")
annotationFilter = AnnotationFilter.Include("com.example.MyIncludeAnnotation")

Thanks, @​sergio-sastre for your contribution. Thank you, @​alecarnevale, @​as6o for reporting this issue.

Bugfix - filter test image input to known extensions

What: Restrict the test task's tracked image input (roborazziImageInput) to known image extensions (png, gif, jpg, jpeg, webp), so unrelated files (e.g. .DS_Store) written by an OS indexer/IDE mid-snapshot can't trip Gradle 9's stricter input validation.
Why: Gradle 9 hardened input-snapshot validation so that a file disappearing from a tracked directory between the listing and the content-hashing phases now hard-fails with Cannot access input property '$N' of task ... java.nio.file.NoSuchFileException.
Thanks, @​boiler23 for letting me know this issue.

Bugfix

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Between 12:00 AM and 03:59 AM (* 0-3 * * *)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot requested review from cka-dev and romanofranz as code owners March 24, 2026 01:03
@renovate renovate Bot force-pushed the renovate/all branch 2 times, most recently from 1337fab to 547e905 Compare March 26, 2026 17:58
@renovate renovate Bot changed the title fix(deps): update all dependencies Update all dependencies Apr 8, 2026
@renovate renovate Bot force-pushed the renovate/all branch 2 times, most recently from 32a500f to 00e890f Compare April 13, 2026 14:15
@renovate renovate Bot force-pushed the renovate/all branch 5 times, most recently from 442165d to bb9b5cc Compare April 23, 2026 09:06
@renovate renovate Bot force-pushed the renovate/all branch 2 times, most recently from f152fcb to c23e8c2 Compare April 28, 2026 14:07
@renovate renovate Bot force-pushed the renovate/all branch 8 times, most recently from ad37f5c to 3248902 Compare May 12, 2026 18:49
@renovate renovate Bot force-pushed the renovate/all branch 2 times, most recently from 2703f37 to 54f523d Compare May 15, 2026 11:10
@renovate renovate Bot force-pushed the renovate/all branch 3 times, most recently from b701c59 to 747c66b Compare May 27, 2026 12:18
@renovate renovate Bot force-pushed the renovate/all branch 3 times, most recently from 2c8dab6 to 096e652 Compare June 10, 2026 03:35
@renovate renovate Bot force-pushed the renovate/all branch 4 times, most recently from 5e01c25 to 78d3a1e Compare June 17, 2026 23:00
@renovate renovate Bot force-pushed the renovate/all branch 3 times, most recently from 36624e8 to 4373d54 Compare June 22, 2026 11:21
@renovate renovate Bot force-pushed the renovate/all branch 2 times, most recently from 1b2ee0e to 4b63625 Compare June 26, 2026 17:37
@renovate renovate Bot force-pushed the renovate/all branch 4 times, most recently from b61e542 to dfa0f71 Compare July 7, 2026 02:09
@renovate renovate Bot force-pushed the renovate/all branch from dfa0f71 to 961dfb8 Compare July 7, 2026 08:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants